package com.kaifamiao.poly;

public class Test {
    public static void main(String[] args) {
        // 声明 Human 类型的引用变量
        Human h = null ;
        System.out.println( h );

        // 自身类型的引用变量指向自身类型的实例
        h = new Human( "张三丰" );
        // 编译器在编译阶段认为是在调用 Human类 中的 eat 方法
        // 因为运行期间引用变量h指向了Human实例，因此就调用 Human类 中的 eat方法
        h.eat( "三秦套餐" );

        // 父类型引用变量指向子类型实例
        h = new India( "莫迪" );
        // 编译器在编译阶段认为是在调用 Human类 中的 eat 方法
        // 因为运行期间引用变量h指向了India实例，因此就调用 India类 中的 eat方法 (前提是India类中重写了该方法)
        h.eat( "手抓饭" );

        // 父类型引用变量指向子类型实例
        h = new Sinaean( "李小芳" );
        // 编译器在编译阶段认为是在调用 Human类 中的 eat 方法
        // 因为运行期间引用变量h指向了Sinaean实例，因此就调用 Sinaean类 中的 eat方法 (前提是India类中重写了该方法)
        h.eat( "牛肉拉面" );


    }
}
